<?php
class UsuariosController extends AppController {

    var $name = 'Usuarios';
    var $appModule = 'Seguridad';
    var $helpers = array('Html','Form','Javascript','Paginator','Codigo','GetList');
    var $components = array('RequestHandler', 'Acl');
    var $uses = array('Usuario', 'ArosAco', 'Aco', 'Aro', 'Ejercicio', 'ArosEmpresa', 
        'ArosCentroDist', 'Empresa', 'CentroDist', 'Grupo');
    var $pageTitle = 'Login';

    function index() {
        //definición de condiciones estándares
        $conditions['Usuario.activo'] = true;

        //verificando si se hizo busqueda por formulario
        $q = $this->getBusqueda($this->data['Usuario']['busqueda']);
        //armando condiciones si q tiene valor
        if(!empty($q)){
            $conditions['OR'] = array(
                    'Usuario.usuario SIMILAR TO' =>  $this->likeAtCenter($q),
                    'Tercero.razon_social SIMILAR TO' => $this->likeAtCenter($q),
                    'Tercero.razon_social SIMILAR TO' => $this->likeAtCenter($q),
                    'Tercero.numero_documento SIMILAR TO' => $this->likeAtCenter($q),                  
            );
        }

        //ejecutando query
        $this->Usuario->Behaviors->attach('Containable');
        $this->paginate['Usuario'] = array(
            'limit'=>$this->limite,
            'order'=>array('Usuario.usuario' =>'asc'),
//            'fields'=>array('id','usuario','grupo_id'),
            'conditions'=>$conditions,
            'contain' => array(
                'Tercero'=>array(
                    'fields'=>array(
                        'id','empresa_id','centro_dist_id',
                        'apellido_paterno','apellido_materno','nombres',
                        'tipo_documento_id','numero_documento',
                        'direccion','distrito_id','telefono1','telefono2',
                        'email'
                    ),
                    'TipoDocumento'=>array(
                        'fields'=>array('id','simbolo')
                    ),
                ),
                'Grupo'=>array('fields'=>array('id','codigo','descripcion'))
                )
        );
        $usuarios = $this->paginate('Usuario');

        //estableciendo valores para vista
        if(!empty($this->params['url']['limite'])){
                $this->limite = $this->params['url']['limite'];
        }
        $this->data['Usuario']['pagesize'] = $this->paginate['limite'] = $this->limite;
        $this->data['Usuario']['busqueda'] = str_replace('|',';',$q);
        $this->set('q',$q);
        $this->set('usuarios',$usuarios);
        $this->set('limite',$this->limite);
    }

    function view($id = null){
        if (!$id && empty($this->data)) {
                $this->Session->setFlash(__('Usuario invalido', true));
                $this->redirect(array('action'=>'index'));
        }

        if (!empty($this->data)) {
            $action = $this->data['ArosAco']['action'];
            //estableciendo el objeto
            $aco = $this->data['ArosAco']['aco_id'];
            $acoNode = $this->Aro->recursive = -1;
            $acoNode = $this->Aco->read(null, $aco);
            $acoStr = $acoNode['Aco']['alias'];
            while (!empty($acoNode['Aco']['parent_id'])){
                $acoNode = $this->Aco->read(null, $acoNode['Aco']['parent_id']);
                if (!empty($acoNode['Aco']['id']) && array_key_exists('alias', $acoNode['Aco'])){
                    $acoStr = $acoNode['Aco']['alias'].'/'.$acoStr;
                }
            }
            // estableciendo el Requester
            $aro = $this->data['ArosAco']['aro_id'];
            $aro = array('model'=>'Usuario', 'foreign_key'=>$aro);
            // establecer el comando (*, create, read, update, delete)
            if (!empty($this->data['ArosAco']['all'])){
                $commands = '*';
            } else {
                $commands = array();
                $keys = array_keys($this->data['ArosAco']['commands']);
                foreach($keys as $k){
                    if ($action == 1){
                        if ($this->data['ArosAco']['commands'][$k] == 1){
                            $commands = array_merge($commands, array($k));
                        }
                    } else {
                        if ($this->data['ArosAco']['commands'][$k] != 1){
                            $commands = array_merge($commands, array($k));
                        }
                    }
                }
            }
            // allowing or dening
            $this->Acl->allow($aro, $acoStr, $commands, $action);
        }
        $this->Usuario->recursive = 2;
        $this->set('usuario', $this->Usuario->read(null, $id));


        $this->ArosAco->Behaviors->attach('Containable');
        $data = $this->ArosAco->find('all', array(
            'conditions'=>array(
                'Aro.foreign_key'=>$id,
                'Aro.model'=>'Grupo'
            ),
            'contain'=>array(
                'Aro',
                'Aco'=>array(
                    'Aco'=>array(
                        'Aco'
                    )
                )
            )
        ));
        $this->set('permissions', $data);
        $this->Acos->recursive = -1;
        $this->set('acos', $this->Aco->find('list', array('fields'=>array('id', 'alias'), 'order'=>array('lft', 'rght'))));
    }

    function add() {
        if (!empty($this->data)) {
            $follow = true;
            if (trim($this->data['Usuario']['usuario'])==''){
                $this->Session->setFlash('El usuario no puede quedar en blanco');
                $follow = false;
            }
            elseif (trim($this->data['Usuario']['password'])==''){
                $this->Session->setFlash('El password no puede quedar en blanco');
                $follow = false;
            }
            elseif ($this->data['Usuario']['password']!=$this->data['Usuario']['reingreso']){
                $this->Session->setFlash('El password y su reingreso son diferentes');
                $follow = false;
            }
            else{
                $this->Usuario->recursive = -1;
                $data = $this->Usuario->find('first',array(
                    'conditions'=>array(
                        'upper(Usuario.usuario)'=>up($this->data['Usuario']['usuario']),
                        'activo'=>true
                    )
                ));
                if (!empty($data['Usuario'])){
                    $this->Session->setFlash('El usuario no esta disponible');
                    $follow = false;
                }
            }
            // validando valores
            if ($follow == true){
                $this->Usuario->begin();
                // inicializando valores
                $this->Usuario->create();
                if (empty($this->data['Tercero']['id']))
                    $this->Usuario->Tercero->create();
                $usuario = $this->Session->read('Usuario');
                $this->data['Tercero']['empresa_id'] = $this->empresaId();
                $this->data['Tercero']['centro_dist_id'] = $this->centroDistId();
                if (trim($this->data['Tercero']['apellido_paterno'].$this->data['Tercero']['apellido_materno'].$this->data['Tercero']['nombres'])!='')
                    $this->data['Tercero']['razon_social'] = $this->data['Tercero']['apellido_paterno'].' '.$this->data['Tercero']['apellido_materno'].', '.$this->data['Tercero']['nombres'];
                $this->data['Usuario']['usuario_creacion_id'] = $this->usuarioId();
                $this->data['Usuario']['fecha_creacion'] = 'now()';
                $this->data['Usuario']['activo'] = 1;
                $grupo = $this->Usuario->Grupo->find('first',array(
                    'conditions'=>array('id'=>$this->data['Usuario']['grupo_id']),
                    'recursive'=>-1
                ));
                $this->data['Usuario']['email'] = sprintf('%s@%s', $this->data['Usuario']['usuario'], $grupo['Grupo']['dominio']);


                if ($this->Usuario->Tercero->save($this->data)) {
                    $this->data['Usuario']['id'] = $this->Usuario->Tercero->id;
                    $this->data['Usuario']['password'] = md5($this->data['Usuario']['password']);
                    if ($this->Usuario->save($this->data)) {
                        $this->Usuario->commit();
                        $this->Session->setFlash(__('El Usuario ha sido guardado', true));
                        $this->redirect(array('action'=>'index'));
                    } else {
                        $this->Usuario->rollback();
                        $this->data['Usuario']['password'] = $this->data['Usuario']['reingreso'];
                        $this->Session->setFlash(__('El Usuario no ha sido guardado.', true));
                    }
                } else {
                    $this->Usuario->rollback();
                    $this->Session->setFlash(__('El Tercero no ha sido guardado.', true));
                }
            }
        }
        $this->set('grupos',
                $this->Usuario->Grupo->find('list',array(
                    'fields'=>array('Grupo.id','Grupo.descripcion'),
                    'order'=>'codigo',
                    'conditions'=>array('activo'=>true),
                    'recursive'=>-1)));
        $this->set('tipoDocumentos',
                $this->Usuario->Tercero->TipoDocumento->find('list',array(
                    'order' => 'TipoDocumento.id',
                    'fields'=>array('TipoDocumento.id','TipoDocumento.simbolo')
        )));
    }

    function edit($id = null) {
        if (!$id && empty($this->data)) {
                $this->Session->setFlash(__('Usuario invalido', true));
                $this->redirect(array('action'=>'index'));
        }
        if (!empty($this->data)) {
            $follow = true;
            if (trim($this->data['Usuario']['usuario'])==''){
                $this->Session->setFlash('El usuario no puede quedar en blanco');
                $follow = false;
            } else if (trim($this->data['Usuario']['password'])==''){
                $this->Session->setFlash('El password no puede quedar en blanco');
                $follow = false;
            } else if ($this->data['Usuario']['password']!=$this->data['Usuario']['reingreso']){
                $this->Session->setFlash('El password y su reingreso son diferentes');
                $follow = false;
            }

            // validando valores
            if ($follow == true){
                $this->Usuario->begin();
                $usuario = $this->Session->read('Usuario');
                if (trim($this->data['Tercero']['apellido_paterno'].$this->data['Tercero']['apellido_materno'].$this->data['Tercero']['nombres'])!='')
                    $this->data['Tercero']['razon_social'] = $this->data['Tercero']['apellido_paterno'].' '.$this->data['Tercero']['apellido_materno'].', '.$this->data['Tercero']['nombres'];
                $this->data['Usuario']['usuario_modificacion_id'] = $usuario['id']; // cambiar por session
                $this->data['Usuario']['fecha_modificacion'] = 'now()';
                if ($this->Usuario->Tercero->save($this->data)) {
                        $this->Usuario->Id = $this->data['Usuario']['id'];
                        if ($this->Usuario->save($this->data)) {
                            $this->Usuario->commit();
                            $this->Session->setFlash(__('El Usuario ha sido guardado.', true));
                            $this->redirect(array('action'=>'index'));
                        } else {
                            $this->Usuario->rollback();
                            $this->Session->setFlash(__('El Usuario no ha sido guardado. Por fravor, intente nuevamente.', true));
                        }
                } else {
                    $this->Usuario->rollback();
                    $this->Session->setFlash(__('El Tercero no ha sido guardado. Por fravor, intente nuevamente.', true));
                    print_r($this->Usuario->Tercero->validationErrors);
                }
            } else {
                
            }
        }
        if (empty($this->data)) {
                $this->Usuario->recursive = 1;
                $this->data = $this->Usuario->read(null, $id);
                $this->data['Usuario']['reingreso'] = $this->data['Usuario']['password'];
        }
        $this->set('grupos',
                $this->Usuario->Grupo->find('list',array(
                    'fields'=>array('Grupo.id','Grupo.descripcion'),
                    'order'=>'codigo',
                    'conditions'=>array('activo'=>true),
                    'recursive'=>-1)));
        $this->set('tipoDocumentos',
                $this->Usuario->Tercero->TipoDocumento->find('list',
                        array('order' => 'TipoDocumento.id',
                            'fields'=>array('TipoDocumento.id',
                                'TipoDocumento.simbolo'))) );        
    }

    function password($id = null) {
        if (!$id && empty($this->data)) {
                $this->Session->setFlash(__('Usuario invalido', true));
                if (isset($this->params['url']['backing']))
                    $this->redirect('/'.$this->params['url']['backing']);
                else
                    $this->redirect(array('action'=>'index'));
        }
        if (!empty($this->data)) {
            $follow = true;
            if (trim($this->data['Usuario']['nueva'])==''){
                $this->Session->setFlash('El password no puede quedar en blanco');
                $follow = false;
            }
            elseif ($this->data['Usuario']['nueva']!=$this->data['Usuario']['reingreso']){
                $this->Session->setFlash('El password y su reingreso son diferentes');
                $follow = false;
            }
            elseif ($this->_usuario['grupo_id']!=1){
                $this->Usuario->recursive = -1;
                $data = $this->Usuario->find('first',array(
                    'conditions'=>array(
                        'Usuario.id'=>$this->data['Usuario']['id'],
                        'Usuario.password'=>md5($this->data['Usuario']['password'])
                    )
                ));
                if (empty($data['Usuario'])){
                    $this->Session->setFlash('El password suministrado no es correcto.');
                    $follow = false;
                }
            }

            // validando valores
            if ($follow == true){
                $this->Usuario->begin();
                $this->data['Usuario']['usuario_modificacion_id'] = $this->_usuario['id']; // cambiar por session
                $this->data['Usuario']['fecha_modificacion'] = 'now()';

                if ($this->_usuario['grupo_id']!=1){
                    $t = $this->data['Usuario']['password'];                    
                }
                $this->data['Usuario']['password'] = md5($this->data['Usuario']['nueva']);
                
                if ($this->Usuario->save($this->data)) {
                    $this->Usuario->commit();
                    $this->Session->setFlash(__('El Usuario ha sido guardado.', true));

                    if (isset($this->params['url']['backing']))
                        $this->redirect('/'.$this->params['url']['backing']);
                    else
                        $this->redirect(array('action'=>'index'));
                } else {
                    $this->Usuario->rollback();
                    $this->Session->setFlash(__('El Usuario no ha sido guardado. Por fravor, intente nuevamente.', true));
                    if ($this->_usuario['grupo_id']!=1)
                            $this->data['Usuario']['password'] = $t;
                }
            }
        }
        if (empty($this->data)) {
                $this->Usuario->recursive = -1;
                $this->data = $this->Usuario->read(null, $id);
                $this->set('usuario',$this->_usuario);
        }
    }

    function delete($id = null, $verbose = true) {
        if ($id == null) {
            if ($verbose){
                $this->Session->setFlash(__('Id de Usuario invalido', true));
                $this->redirect(array('action'=>'index'));
            }
            else return false;
        }
        $this->Usuario->begin();
        $this->Usuario->recursive = -1;
        $data = $this->Usuario->read(null, $id);
        $usuario = $this->Session->read('Usuario');
        $data['Usuario']['activo']=0;
        $data['Usuario']['usuario_borrado_id']=$usuario['id'];
        $data['Usuario']['fecha_borrado']='now()';
        //eliminando el usuario
        if (!$this->Usuario->save($data) && !verbose){
            $this->Usuario->rollback();
            return false;
        }
        if ($verbose){
            $this->Usuario->commit();
            $this->Session->setFlash(__('Nota de Credito eliminado', true));
            $this->redirect(array('action'=>'index'));
        }
        else{
            $this->Usuario->commit();
            return true;
        }
    }

    function process(){// procesa anulaciones y eliminaciones en bloque
        //$this->autoRender = false;
        $op = isset($this->params['form']['cancel'])?'anular':'eliminar';
        $flag = true;
        $i = 0;
        foreach($this->data as $item){
            if ($item['id']!='0'){
                if(isset($this->params['form']['cancel'])){ // anular
                    $flag = $this->cancel($item['Usuario']['id'], false);
                } else { //eliminar
                    $flag = $this->delete($item['Usuario']['id'], false);
                }
                if (!$flag){
                    $data = $this->Usuario->read(null, $item['id']);
                    $this->Session->setFlash(__("Se ha producido un error al $op el Usuario #".$data['Usuario']['usuario'], true));
                    break;
                }
                //else echo $item['id'].'<br/>';
            }
            $i++;
        }
        if ($flag && $i++){
            $this->Session->setFlash(__("El proceso de $op Usuarios se ha realizado con exito.", true));
        }
        $this->redirect(array('action'=>'index'));
    }

    function deletePermission($id = null, $verbose = true, $usuarioId =null) {
        if ($id == null) {
            if ($verbose){
                $this->Session->setFlash(__('Id de Permiso invalido', true));
                if (empty($groupId))
                    $this->redirect(array('action'=>'index'));
                else
                    $this->redirect(array('action'=>'views',$permissions));
            }
            else return false;
        }
        //eliminando el permisos del usuario

        $this->ArosAco->recursive = -1;
        if (!$this->ArosAco->delete(array('id'=>$id)) && !verbose){
            return false;
        }
        if ($verbose){
            $this->Session->setFlash(__('Permiso eliminado', true));
                if (empty($groupId))
                    $this->redirect(array('action'=>'index'));
                else
                    $this->redirect(array('action'=>'view',$permissions));
        }
        else{
            return true;
        }
    }

    function processPermissions(){// procesa anulaciones y eliminaciones en bloque
        $op = isset($this->params['form']['cancel'])?'anular':'eliminar';
        $flag = true;
        $i = 0;
        foreach($this->data['Permissions'] as $item){
            if ($item['id']!='0'){
                if(isset($this->params['form']['delete'])){ // anular
                    $flag = $this->deletePermission($item['id'], false);
                }
                if (!$flag){
                    $this->Session->setFlash(__("Se ha producido un error al $op el Permiso #".$item['id'], true));
                    break;
                }
            }
            $i++;
        }
        if ($flag && $i++){
            $this->Session->setFlash(__("El proceso de $op Permisos se ha realizado con exito.", true));
        }
        $this->redirect(array('action'=>'view', $this->data['Usuario']['id']));
    }

    function login(){
        Configure::write('debug', 0); //quito el debugger
        $this->layout = 'login';
        if(!empty($this->params['url']['pag'])){
            $this->set('pag',$this->params['url']['pag']);
        } else {
            $this->set('pag','/');
        }
        if(!empty($this->data)){
            $usuario = $this->Usuario->validarLogin($this->data['Usuario']);						
            if($usuario != false){
                $now = date('d/m/Y');
                $parts = split('/',$now);
                $this->Ejercicio->recursive = -1;
                $ejercicio = $this->Ejercicio->find('first', array(
                    'fields'=>array('id','codigo','fecha_inicial','fecha_final'),
                    'conditions'=>array('activo'=>true,'cerrado'=>false, 'codigo'=>$parts[2]),
                    'order'=>array('id'=>'desc')
                ));
                if (!isset($ejercicio['Ejercicio']['id']) || empty($ejercicio['Ejercicio']['id'])){
                    $this->Ejercicio->recursive = -1;
                    $ejercicio = $this->Ejercicio->find('first', array(
                        'fields'=>array('id','codigo','fecha_inicial','fecha_final'),
                        'conditions'=>array('activo'=>true,'cerrado'=>false),
                        'order'=>array('id'=>'desc')
                    ));
                    if (!isset($ejercicio['Ejercicio']['id']) || empty($ejercicio['Ejercicio']['id'])){
                        $this->Session->setFlash('No existe Ejercicio aperturado');
                        $this->Session->destroy('Usuario');
                        $this->Session->destroy('Ejercicio');
                        $this->redirect(array('controller'=>'Usuarios','action'=>'login'));
                    }
                }
                $ejercicio['Ejercicio']['Actual']['periodo_id'] = (int)$parts[1];
                $ejercicio['Ejercicio']['Actual']['fecha'] = $now;
                $ejercicio['Ejercicio']['Actual']['dia'] = (int)$parts[0];
                $ejercicio['Ejercicio']['Actual']['mes'] = $this->months[$ejercicio['Ejercicio']['Actual']['periodo_id']-1];
                $ejercicio['Ejercicio']['Actual']['anyo'] = (int)$parts[2];

                $now = strtotime(date('j F Y'));
                $mark = strtotime('01 March 2011');
                if ($now < $mark) $usuario['Empresa']['igv'] = '19.00';

                $this->Session->write('Usuario', $usuario);
                $this->Session->write('Ejercicio', $ejercicio['Ejercicio']);

                $usuario['grupos_despacho'] = $this->grupos_despacho = array_keys($this->Grupo->find('list',array(
                    'conditions'=>array(
                        'activo'=>true,
                        'despacho'=>true
                    ),
                    'recursive'=>-1
                )));
                $usuario['logistica'] = $this->logistica =  array_keys($this->Grupo->find('list',array(
                    'conditions'=>array(
                        'activo'=>true,
                        'logistica'=>true
                    ),
                    'recursive'=>-1
                )));
                $usuario['gerencia'] = $this->gerencia  = array_keys($this->Grupo->find('list',array(
                    'conditions'=>array(
                        'activo'=>true,
                        'gerencia'=>true
                    ),
                    'recursive'=>-1
                )));

                $this->Session->write('Usuario', $usuario);
				
		$this->redirect(array('controller'=>$this->data['Usuario']['pag']) ,null,true);
            } else{
                $this->Session->setFlash('Nombre de usuario o contraseña incorrecta');
            }
        }
    }

    function logout(){
        $this->Session->destroy('Usuario');
        $this->Session->destroy('Ejercicio');
        $this->Session->setFlash('Usted a cerrado la sesion exitosamente.');
        $this->redirect('login');
    }

    function ajax(){
        if ($this->RequestHandler->isAjax()) {
            Configure::write('debug', 0); //quito el debugger
            $this->autoRender = false;//desabilito el auto dibujado
            $this->autoLayout = false;//desabilito el auto layout
            if (!empty($this->params['form'])){ // compruebo si existen parametros en el querystring
                switch ($this->params['form']['action']){
                    case 1: // 1-buscar por documento
                        $this->Usuario->Tercero->recursive = -1;
                        $data = $this->Usuario->Tercero->find('first',
                                array('conditions'=>
                                    array('Tercero.tipo_documento_id'=>$this->params['form']['TerceroTipoDocumentoId'],
                                        'Tercero.numero_documento'=>$this->params['form']['TerceroNumeroDocumento'])));
                        $result = $data['Tercero'];
                        break;
                    case 2: // 2-buscar por ruc
                        $this->Usuario->Tercero->recursive = -1;
                        $data = $this->Usuario->Tercero->find('first',
                                array('conditions'=>
                                    array('Tercero.ruc'=>$this->params['form']['TerceroRuc'])));
                        $result = $data['Tercero'];
                        break;
                    case 3: // 2-confirmar usuario
                        $this->Usuario->recursive = -1;
                        $data = $this->Usuario->find('first',
                                array('conditions'=>
                                    array('upper(Usuario.usuario)'=>up($this->params['form']['UsuarioUsuario']))));
                        if (empty($data['Usuario']))
                            $result = array('usuario'=>'disponible');
                        else
                            $result = null;
                        break;
                }
                if ($result){
                    $this->header('Content-Type: application/json');
                    echo json_encode($result);
                }
                else
                    echo '';
            }
            exit();
        }
    }

    function addEmpresa($id = null){
        if ($id == null) {
            $this->Session->setFlash(__('Id de Usuario invalido', true));
            $this->redirect(array('action'=>'index'));
        }
        if (!empty($this->data)){
            if (isset($this->params['form']['grabar'])){ // cuando adiciona
                $_aro = $this->Aro->find('first',array('conditions'=>array('model'=>'Usuario','foreign_key'=>$id),'recursive'=>-1));
                $this->data['ArosEmpresa']['aro_id']=$_aro['Aro']['id'];
                $this->ArosEmpresa->create($this->data['ArosEmpresa']);
                if ($this->ArosEmpresa->save()){
                    $this->Session->setFlash('Se ha realizado el vinculo correctamente');
                } else {
                    $this->Session->setFlash('Se ha producido un error al vincular la empresa');
                }
            } else { // cuando elimina
                foreach($this->data as $data){
                    if (array_key_exists('id', $data) && $data['id']!=0){
                        $this->ArosEmpresa->recursive = -1;
                        $aroempresa = $this->ArosEmpresa->read(null, $data['id']);
                        if (!$this->ArosEmpresa->remove($aroempresa['ArosEmpresa'])){
                            $this->Session->setFlash('Se ha producido un error al eliminar el vinculo con la empresa');
                            break;
                        }
                    }
                }

            }
        }

        $this->Usuario->Behaviors->attach('Containable');
        $usuario = $this->Usuario->find('first',array(
            'fields'=>array('id','usuario'),
            'conditions'=>array('Usuario.id'=>$id),
            'contain'=>array(
                'Grupo'=>array(
                    'fields'=>array('descripcion')
                ),
                'Tercero'=>array(
                    'fields'=>array('ruc','razon_social','apellido_paterno','apellido_materno','nombres','numero_documento','direccion','telefono1','telefono2','email','web'),
                    'TipoDocumento'=>array(
                        'fields'=>array('simbolo')
                    ),
                    'Ubigeo'=>array(
                        'fields'=>array('descripcion')
                    )
                )
            )
        ));
        $aro = $this->Aro->find('first',array('conditions'=>array('model'=>'Usuario','foreign_key'=>$id),'recursive'=>-1));
        $this->ArosEmpresa->Behaviors->attach('Containable');
        $aroempresas = $this->ArosEmpresa->find('all', array(
            'fields'=>array('id','aro_id','empresa_id'),
            'conditions'=>array('aro_id'=>$aro['Aro']['id']),
            'contain'=>array(
                'Empresa'=>array('fields'=>array('razon_social','nombre_comercial'))
            ),
            'order'=>'Empresa.codigo'
        ));
        $this->set('q','');
        $this->set('limite',2000);
        $this->set('usuario', $usuario);
        $this->set('aroempresas', $aroempresas);
        $this->set('empresas', $this->Empresa->find('list', array(
            'fields'=>array('id','razon_social'),
            'conditions'=>array('activo'=>true),
            'order'=>'Empresa.codigo',
            'recursive'=>-1
        )));
    }

    function addCentroDist($id = null){
        if ($id == null) {
            $this->Session->setFlash(__('Id de Usuario invalido', true));
            $this->redirect(array('action'=>'index'));
        }
        if (!empty($this->data)){
            if (isset($this->params['form']['grabar'])){ // cuando adiciona
                $_aro = $this->Aro->find('first',array('conditions'=>array('model'=>'Usuario','foreign_key'=>$id),'recursive'=>-1));
                $this->data['ArosCentroDist']['aro_id']=$_aro['Aro']['id'];
                $this->ArosCentroDist->create($this->data['ArosCentroDist']);
                if ($this->ArosCentroDist->save()){
                    $this->Session->setFlash('Se ha realizado el vinculo correctamente');
                } else {
                    $this->Session->setFlash('Se ha producido un error al vincular el deposito');
                }
            } else { // cuando elimina
                foreach($this->data as $data){
                    if (array_key_exists('id', $data) && $data['id']!=0){
                        $this->ArosCentroDist->recursive = -1;
                        $arodeposito = $this->ArosCentroDist->read(null, $data['id']);
                        if (!$this->ArosCentroDist->remove($arodeposito['ArosCentroDist'])){
                            $this->Session->setFlash('Se ha producido un error al eliminar el vinculo con el deposito ');
                            break;
                        }
                    }
                }

            }
        }

        $this->Usuario->Behaviors->attach('Containable');
        $usuario = $this->Usuario->find('first',array(
            'fields'=>array('id','usuario'),
            'conditions'=>array('Usuario.id'=>$id),
            'contain'=>array(
                'Grupo'=>array(
                    'fields'=>array('descripcion')
                ),
                'Tercero'=>array(
                    'fields'=>array('ruc','razon_social','apellido_paterno','apellido_materno','nombres','numero_documento','direccion','telefono1','telefono2','email','web'),
                    'TipoDocumento'=>array(
                        'fields'=>array('simbolo')
                    ),
                    'Ubigeo'=>array(
                        'fields'=>array('descripcion')
                    )
                )
            )
        ));
        $aro = $this->Aro->find('first',array('conditions'=>array('model'=>'Usuario','foreign_key'=>$id),'recursive'=>-1));
        $this->ArosCentroDist->Behaviors->attach('Containable');
        $arodepositos = $this->ArosCentroDist->find('all', array(
            'fields'=>array('id','aro_id','centro_dist_id'),
            'conditions'=>array('aro_id'=>$aro['Aro']['id']),
            'contain'=>array(
                'CentroDist'=>array('fields'=>array('codigo','descripcion','descripcion_corta', 'simbolo', 'direccion'))
            ),
            'order'=>'CentroDist.codigo'
        ));
        $this->set('q','');
        $this->set('limite',2000);
        $this->set('usuario', $usuario);
        $this->set('arodepositos', $arodepositos);
        $this->set('centroDists', $this->CentroDist->find('list', array(
            'fields'=>array('id','descripcion'),
            'conditions'=>array('activo'=>true),
            'order'=>'CentroDist.codigo',
            'recursive'=>-1
        )));
    }

}
?>
